#include "tuning_tab.h"
#include "ui_tuning_tab.h"
#include "isp_tuning/param_manager.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QRegularExpressionValidator>

namespace isp_tuning {

tuning_tab::tuning_tab(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::tuning_tab)
{
    ui->setupUi(this);  // 设置界面
    viewer = new image_viewer(this);

    // 将 image_viewer 的视图控件添加到界面布局中
    ui->preview_layout->addWidget(viewer->get_view());  // QGridLayout

    // 设置宽度和高度输入框的验证器 只允许输入正整数
    QRegularExpressionValidator* intValidator = new QRegularExpressionValidator(QRegularExpression("[1-9]\\d*"), this);
    ui->widthInput->setValidator(intValidator);
    ui->heightInput->setValidator(intValidator);

}

tuning_tab::~tuning_tab() {
    delete ui;  // 释放界面资源
    delete viewer;
}




// 从 UI 中读取元数据
bool tuning_tab::read_metadata_from_ui(int& width, int& height, int& sensorBits, int& bayerPattern) {
    // 读取宽度
    width = ui->widthInput->text().toInt();

    // 读取高度
    height = ui->heightInput->text().toInt();

    // 读取传感器位宽
    sensorBits = ui->sensorBitsInput->value();

    // 读取 Bayer 模式
    bayerPattern = ui->bayerPatternInput->currentIndex();

    return true;  // 成功读取元数据
}





// 打开 RAW 图片的槽函数
void tuning_tab::on_btn_raw_open_clicked() {

    // 从 UI 界面读取元数据
    int width, height, sensorBits, bayerPattern;
    if (!read_metadata_from_ui(width, height, sensorBits, bayerPattern)) {
        return;  // 如果读取失败，直接返回
    }




    // 弹出文件选择对话框，只允许选择 RAW 格式的图片
    QString file_path = QFileDialog::getOpenFileName(
        this,                               // 父窗口
        "Open RAW Image",                   // 对话框标题
        "",                                 // 默认打开路径
        "RAW Images (*.raw)"                // 文件过滤器，只显示 .raw 文件
        );

    if (file_path.isEmpty()) {
        QMessageBox::warning(this, "Warning", "No file selected!");
        return;
    }

    // 向 param_manager 设置元数据和文件路径
    param_manager::getInstance()->update_raw_metadata(width, height, sensorBits, bayerPattern);
    param_manager::getInstance()->set_file_path(file_path);


    // 调用 image_viewer 显示 RAW 图片
    if (!viewer->display_image()) {
        QMessageBox::warning(this, "Error", "Failed to display the RAW image!");
    }
}



}
